package com.algorithm.class8;

/**
 * 50. Pow(x, n)
 *
 * <p>实现 pow(x, n) ，即计算 x 的 n 次幂函数。
 *
 * <p>示例 1:
 *
 * <p>输入: 2.00000, 10 输出: 1024.00000 示例 2:
 *
 * <p>输入: 2.10000, 3 输出: 9.26100 示例 3:
 *
 * <p>输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 说明:
 *
 * <p>-100.0 < x < 100.0 n 是 32 位有符号整数，其数值范围是 [−231, 231 − 1] 。
 *
 * <p>来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/powx-n 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author frank woo(吴峻申) <br>
 *     email:<a href="mailto:frank_wjs@hotmail.com">frank_wjs@hotmail.com</a> <br>
 * @date 2020/7/7 17:33<br>
 */
public class PowxN {
  public double myPow(double x, int n) {
    // 当n取范围的左边界时，此处取绝对值用int会溢出
    long longN = Math.abs((long) n);
    double result = 1;
    while (longN > 0) {
      if ((longN & 1) == 1) {
        result *= x;
      }
      x *= x;
      longN >>= 1;
    }
    if (n < 0) {
      result = 1 / result;
    }
    return result;
  }
}
